package Formularios;

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Robot;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class frmBuscarDireccion extends JFrame {

	private JPanel contentPane;
	private JTextField txtDescripcion;
	private JTable table;
	
	//teclas Virtuales
	static final int VK_SALTO_DE_LINEA = 10;
	static final int VK_IZQUIERDA = 37;
	static final int VK_ARRIBA = 38;
	static final int VK_DERECHA= 39;
	static final int VK_ABAJO = 40;
	static final int VK_F5 = 116;
	static final int VK_SUPR = 127;
	
	//NEMONICOS
	static final int COL_CODIGO = 0;
	static final int COL_DESCRIPCION = 1;
	
	static Statement comando;
	static Connection con;
	int iRenglon = 0;
	int iCodigo = 0;
	String sDescripcion = "";
	static int iTipoBusqueda = 0; //1 = Estado, 2 = Municipio, 3 = Colonia
	static int iEstado = 0;
	static int iMunicipio = 0;  

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					//frmBuscarDireccion frame = new frmBuscarDireccion(frame);
					//frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @param frame 
	 */
	public frmBuscarDireccion(final frmClientes frame) {
		setTitle("Busqueda de Estados");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		// Centrar
		setLocationRelativeTo(null);
		
		general gen = new general();
		try {
			comando = gen.abrirConexion(cNemonicos.IP_GLOBAL,1);
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblDescripcion = new JLabel("Descripcion :");
		lblDescripcion.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDescripcion.setBounds(12, 12, 98, 15);
		contentPane.add(lblDescripcion);
		
		txtDescripcion = new JTextField();
		txtDescripcion.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {
				case VK_ABAJO:
					table.requestFocus();
					break;
					
				case VK_F5:
					
					break;

				default:
					break;
				}
				if ( txtDescripcion.getText().length() > 2 )
				{
					switch (iTipoBusqueda) {
					case 1:
						buscarEstados(txtDescripcion.getText());
						break;
					case 2:
						buscarMunicipios(iEstado,txtDescripcion.getText());
						break;
					case 3:
						buscarColonias(iMunicipio,txtDescripcion.getText());
						break;

					default:
						break;
					}
				}
				else
				{
					limpiarGrid();
				}
			}
			
		});
		
		txtDescripcion.setBounds(117, 10, 174, 19);
		contentPane.add(txtDescripcion);
		txtDescripcion.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 56, 424, 199);
		contentPane.add(scrollPane);
		
		table = new JTable();
		table.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {
				case VK_SALTO_DE_LINEA:
					int iRen = table.getSelectedRow();
					int iCodigo = (int) table.getValueAt(iRen, COL_CODIGO);
					String sDesc = (String) table.getValueAt(iRen, COL_DESCRIPCION);
					switch (iTipoBusqueda) {
					case 1:
						/*frame.txtCodEstado.setText(String.valueOf(iCodigo));
						frame.txtEstado.setText(sDesc);
						frame.txtCodMunicipio.requestFocus();*/
						dispose();
						break;
					case 2:
						/*frame.txtCodMunicipio.setText(String.valueOf(iCodigo));
						frame.txtMunicipio.setText(sDesc);
						frame.txtCodColonia.requestFocus();*/
						dispose();
						break;
					case 3:
						/*frame.txtCodColonia.setText(String.valueOf(iCodigo));
						frame.txtColonia.setText(sDesc);
						frame.txtTelefono.requestFocus();*/
						dispose();
						break;

					default:
						break;
					}
					
					break;

				default:
					break;
				}
			}
		});
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
				{null, null},
			},
			new String[] {
				"Codigo", "Descripcion"
			}
		) {
			Class[] columnTypes = new Class[] {
				Integer.class, String.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
		});
		table.getColumnModel().getColumn(0).setResizable(false);
		table.getColumnModel().getColumn(1).setResizable(false);
		table.getColumnModel().getColumn(1).setPreferredWidth(200);
		scrollPane.setViewportView(table);
	}
	

	public boolean buscarEstados(String sDesc) {

		boolean bRespuesta = true;
		sDesc = sDesc.toUpperCase();
		limpiarGrid();
		try {

			// Una variable String para almacenar la sentencia SQL
			String query = "select c_estado,TRIM(d_estado) AS estado from tc_entidades  where  d_estado like '%" + sDesc + "%' ;";
			ResultSet resultado = comando.executeQuery(query);

			// Ejecutamos la consulta SQL
			while (resultado.next()) {
				sDescripcion = resultado.getString("estado");
				iCodigo = resultado.getInt("c_estado");
				
				table.setValueAt(iCodigo, iRenglon, 0);
				table.setValueAt(sDescripcion, iRenglon, 1);				
				iRenglon++;
			}

		} catch (SQLException e) {
			bRespuesta = false;
			// Por si ocurre un error
			System.out.println(e.getMessage());
			int op = JOptionPane.showOptionDialog(null, e.getMessage(),
					"Entrada Invalidad", JOptionPane.YES_OPTION,
					JOptionPane.ERROR_MESSAGE, null,
					new Object[] { "ACEPTAR" }, "ACEPTAR");
			if (op == 0) {

			}
		}

		return bRespuesta;
	}
	
	public boolean buscarMunicipios(int iCodEstado, String sDesc) {

		boolean bRespuesta = true;
		sDesc = sDesc.toUpperCase();
		limpiarGrid();
		try {

			// Una variable String para almacenar la sentencia SQL
			String query = "select c_municipio, trim(d_municipio) as municipio from tc_municipios where c_estado = " + iCodEstado + " and UPPER(d_municipio) like '%" + sDesc + "%' ;";

			ResultSet resultado = comando.executeQuery(query);

			// Ejecutamos la consulta SQL
			while (resultado.next()) {
				sDescripcion = resultado.getString("municipio");
				iCodigo = resultado.getInt("c_municipio");
				
				table.setValueAt(iCodigo, iRenglon, 0);
				table.setValueAt(sDescripcion, iRenglon, 1);				
				iRenglon++;
			}

		} catch (SQLException e) {
			bRespuesta = false;
			// Por si ocurre un error
			System.out.println(e.getMessage());
			int op = JOptionPane.showOptionDialog(null, e.getMessage(),
					"Entrada Invalidad", JOptionPane.YES_OPTION,
					JOptionPane.ERROR_MESSAGE, null,
					new Object[] { "ACEPTAR" }, "ACEPTAR");
			if (op == 0) {

			}
		}

		return bRespuesta;
	}
	
	public boolean buscarColonias(int iCodColonia, String sDesc) {

		boolean bRespuesta = true;
		sDesc = sDesc.toUpperCase();
		limpiarGrid();
		try {

			// Una variable String para almacenar la sentencia SQL
			String query = "select c_asentamiento, trim(d_asentamiento) as colonia from tc_asentamientos where c_municipio = " + iCodColonia + " and UPPER(d_asentamiento) like '%" + sDesc + "%' ;";

			ResultSet resultado = comando.executeQuery(query);

			// Ejecutamos la consulta SQL
			while (resultado.next()) {
				sDescripcion = resultado.getString("colonia");
				iCodigo = resultado.getInt("c_asentamiento");
				
				table.setValueAt(iCodigo, iRenglon, 0);
				table.setValueAt(sDescripcion, iRenglon, 1);				
				iRenglon++;
			}

		} catch (SQLException e) {
			bRespuesta = false;
			// Por si ocurre un error
			System.out.println(e.getMessage());
			int op = JOptionPane.showOptionDialog(null, e.getMessage(),
					"Entrada Invalidad", JOptionPane.YES_OPTION,
					JOptionPane.ERROR_MESSAGE, null,
					new Object[] { "ACEPTAR" }, "ACEPTAR");
			if (op == 0) {

			}
		}

		return bRespuesta;
	}
	
	public void limpiarGrid()
	{		
		for (int iRen = 0; iRen < table.getRowCount(); iRen++) {
			table.setValueAt(null,iRen, COL_CODIGO);
			table.setValueAt(null,iRen, COL_DESCRIPCION);
		}
		iRenglon = 0;
	}
	public int getCodigo()
	{
		int iCodigo2 = iCodigo;
		return iCodigo2;
		
	}	
	public String getDescripcion()
	{
		String sDescripcion2 = sDescripcion;
		
		return sDescripcion2;
	}
}
